<!--
Copyright 2014 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<script>
function CTCommit() {}

CTCommit.create = function(author, message, baseUrl, repository) {
  var commit = new CTCommit();
  var revision = CTCommit.findRevision(message);
  commit.complete(author, message, revision);
  commit.url = commit._url(baseUrl);
  commit.repository = repository;
  return commit;
}

// This is for cases where we can't get the commit data off the
// repository for some reason.
CTCommit.createIncomplete = function(baseUrl, revision, repository) {
  var commit = new CTCommit();
  commit.revision = revision;
  commit.url = commit._url(baseUrl);
  commit.repository = repository;
  return commit;
}

CTCommit.findRevision = function(message) {
  var svnRegexp = /^git-svn-id:[^@]*@(\d+).*$/m;
  var gitRegexp = /^Cr-Commit-Position\:\ refs\/heads\/master@\{#(\d+)\}.*$/m;

  var match = svnRegexp.exec(message);
  if (!match)
    match = gitRegexp.exec(message);

  if (match)
    return parseInt(match[1], 10);
  return null;
}

CTCommit.prototype.complete = function(author, message, revision) {
  this.author = author;
  this.message = message;
  this.revision = revision;
  this.summary = this._findSummary();
  this.isComplete = true;
}

CTCommit.prototype._url = function(baseUrl) {
  return baseUrl.assign({revision: this.revision});
}

CTCommit.prototype._findSummary = function() {
  var index = this.message.indexOf('\n');
  return this.message.substring(0, index);
}
</script>
